while 循环

        while 循环常常用来写死循环的脚本,用于监控某项服务。

1
[root@192 sbin]# vim while.sh

        加入内容:

1
2
3
4
5
6
7
#!/bin/bash
a=5
while [ $a -ge 1 ]
do
echo $a
a=$[$a-1]
done

        while 循环格式也很简单:

1
2
3
while 条件:do
command
done

        上例脚本的执行结果为:

1
[root@192 sbin]# sh while.sh

        另外可以把循环条件拿一个冒号代替,这样可以做到死循环,监控脚本常常这样写:

1
2
3
4
while :;do
command
sleep 3
done

        下面用 while 死循环,来写一个判断系统负载的脚本。

1
[root@192 sbin]# vim 6.sh

        加入内容:

1
2
3
4
5
6
7
8
9
#!/bin/bash
while :;do
load=`uptime |awk '{print $(NF-2)}'|cut -d. -f1`
if [ $load -gt 10 ]
then
echo "system load is high."|mail -s "system load" 89429541@qq.com
fi
sleep 10
done

        说明:uptime 命令是用来查看系统负载的,用 awk 截取倒数第三段,也即是平均 1 分钟的系统负载,然后只取整数部分。如果系统负载高于 10 则发邮件告警。每隔 10 秒检查一次。但是如果系统负载一直高于 10,那么将会出现每隔 10 秒发一次邮件的窘境。